﻿using System;

// TẠO MÃ TỰ ĐỘNG CHO PHIẾU ĐĂNG KÝ VÀ HỢP ĐỒNG
//VD: HDB/DA1/0001

namespace RealEstate.MVC.Web.Helper
{
    public class GenerateHelper
    {
        //Ex: HDB/DA1/0001
        /// <summary>
        /// Tự động sinh mã có dạng HDB/DA1/0001
        /// </summary>
        /// <param name="preString">Tiền tố</param>
        /// <param name="maxValue">Giá trị cao nhất cả mã hiện tại</param>
        /// <param name="length">Độ dài của mã</param>
        /// <returns>Mã</returns>
        public static string Generate(string preString, string str, int length)
        {
            string value;
            if (String.IsNullOrEmpty(str))
            {
                value = "1";
                while (value.Length < length)
                {
                    value = "0" + value;
                }
                return preString + "/" + value;
            }
            else
            {
                value = (GetMaxValue(str) + 1).ToString();
               
                while (value.Length < length)
                {
                    value = "0" + value;
                }

                return preString + "/" + value;
            }
        }

        /// <summary>
        /// Lấy giá trị cao nhất của mã (phiếu đăng ký, hợp đồng...)
        /// </summary>
        private static int GetMaxValue(string str)
        {
            if(!String.IsNullOrEmpty(str))
            {
                //TÁCH CHUỖI LẤY SỐ THỰ TỰ CỦA MÃ HDB/ANKHANG/1000 => ANKHANG/1000 => 1000
                while (str.IndexOf('/') >= 0)
                {
                    str = str.Substring(str.IndexOf('/') + 1, str.Length - str.IndexOf('/') - 1);
                }
            }

            try
            {
                return int.Parse(str);
            }
            catch
            {
                return 0;
            }
        }

        //Generate số phiếu đề nghị thu
        public static string GenerateDeNghiThu(string preString, string maxValue, int length)
        {
            string yearCurrent = DateTime.Now.Year.ToString().Substring(0, 4);
            string monthCurrent = DateTime.Now.Month.ToString(); // "4"
            //Khi thang hien tai nho hon 9 thi cong them "0" vao
            if (Convert.ToInt32(monthCurrent) <= 9)
            {
                monthCurrent = "0" + monthCurrent;
            }
            //Khi tham so select o database la null khoi tao so dau tien
            if (String.IsNullOrEmpty(maxValue))
            {
                string ret = "1";
                while (ret.Length < length)
                {
                    ret = "0" + ret;
                }
                return preString + yearCurrent + monthCurrent + "-" + ret;
            }
            else
            {//                                         PDN/2011-03/00001
                string preStringMax = maxValue.Substring(0, maxValue.IndexOf("-") - 5);
                string maxNumber = maxValue.Substring(maxValue.IndexOf("-") + 4);
               // string monthYear = maxValue.Substring(maxValue.IndexOf("-") - 4, 4);
                string monthDb = maxValue.Substring(maxValue.IndexOf("-") + 1,2); //as "04"

                string stringTemp = maxNumber;
                //Khi thang trong gia tri max bang voi thang create thi cong len cho 1
                if (monthDb == monthCurrent)
                {
                    int strToInt = Convert.ToInt32(maxNumber);
                    maxNumber = Convert.ToString(strToInt + 1);
                    while (maxNumber.Length < stringTemp.Length)
                        maxNumber = "0" + maxNumber;
                }
                else //reset
                {
                    maxNumber = "1";
                    while (maxNumber.Length < stringTemp.Length)
                    {
                        maxNumber = "0" + maxNumber;
                    }
                }

                return preStringMax + "/" + yearCurrent + "-" + monthCurrent + "/" + maxNumber;
            }
        }

    }
}
